package fr.afcepf.atod16.groupe1.projet1.dao.client;

import fr.afcepf.atod16.groupe1.projet1.exception.ErreurLoginConnexion;
import fr.afcepf.atod16.groupe1.projet1.dao.DaoAbstract;
import fr.afcepf.atod16.groupe1.projet1.dao.DaoAssembleur;
import fr.afcepf.atod16.groupe1.projet1.dto.client.DtoCompteClient;
import fr.afcepf.atod16.groupe1.projet1.dto.util.DtoProduitVignette;
import fr.afcepf.atod16.groupe1.projet1.entities.catalogue.FicheProduit;
import fr.afcepf.atod16.groupe1.projet1.entities.client.CompteClient;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 * Implementation de la DAO comptes clients avec JPA
 *
 * @author cedric
 */
@Stateful
public class DaoCompteClientJpa extends DaoAbstract<CompteClient, DtoCompteClient> implements DaoCompteClient {

    @PersistenceContext(unitName = "projet1c-ejbPU")
    private EntityManager em;

    /**
     * Surcharge la fonction de récupération de l'entityManager car le contexte
     * de persistance est injecté dans la classe.
     *
     * @return L'entityManager
     */
    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    /**
     * Constructeur fournissant à la superclasse l'objet Class de l'entité
     */
    public DaoCompteClientJpa() {
        super(CompteClient.class);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<DtoCompteClient> rechercherParNom(String nom) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<DtoCompteClient> rechercherParMail(String mail) {

        System.out.println("Dans le dao recherche de l'email =" + mail);
        Query query = getEntityManager().createQuery("SELECT c FROM CompteClient c WHERE c.email = :adresseMail");
        query.setParameter("adresseMail", mail);
        List<CompteClient> comptesClient = query.getResultList();
        List<DtoCompteClient> dtoComptesClient = new ArrayList<DtoCompteClient>();
        DtoCompteClient dtoClient;

        for (CompteClient client : comptesClient) {
            dtoClient = DaoAssembleur.createDto(client);
            dtoComptesClient.add(dtoClient);
        }
        return dtoComptesClient;
    }
}
